from pyspark.sql import SparkSession

# 累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量，
# 在Executor 端的每个 Task 都会得到这个变量的一份新的副本，每个 task 更新这些副本的值后，
# 传回 Driver 端调用merge方法对数据进行合并
if __name__ == '__main__':
    spark = SparkSession.builder.appName("accumulator_learn").master("local[*]").getOrCreate()
    sc = spark.sparkContext
    accum = sc.accumulator(0)
    sc.parallelize([1, 2, 3, 4]).foreach(lambda x: accum.add(x))
    print(accum.value)
